#ifndef OCK_MEMORY_BRIDGE_HMM_HETERO_MGR_CREATOR_H
#define OCK_MEMORY_BRIDGE_HMM_HETERO_MGR_CREATOR_H
#include <cstdint>
#include <utility>
#include "ock/hmm/mgr/OckHmmHeteroMemoryMgr.h"
#include "ock/acladapter/executor/OckAsyncTaskExecuteService.h"
namespace ock {
namespace hmm {
enum class OckHmmMemoryName : uint32_t {
    DEVICE_DATA = 0,
    DEVICE_SWAP = 1,
    HOST_DATA =2,
    HOST_SWAP = 3,
}

class OckHmmMgrCreator
{
public:
    std::pair<OckHmmErrorCode, std::unique_ptr<OckHmmSingleDeviceMgr>> Create(const OckHmmDeviceInfo &deviceInfo,
        uint32_t timeout);
    std::pair<OckHmmErrorCode, std::unique_ptr<OckHmmSingleDeviceMgr>> Create(const OckHmmDeviceInfo &deviceInfo,
        std::shared_ptr<acladapter::OckAsyncTaskExecuteService> service, uint32_t timeout);
    std::pair<OckHmmErrorCode, std::unique_ptr<OckHmmSingleDeviceMgr>> Create(
        std::shared_ptr<OckHmmDeviceInfoVec> deviceInfoVec, uint32_t timeout);
    std::pair<OckHmmErrorCode, std::unique_ptr<OckHmmSingleDeviceMgr>> Create(
        std::shared_ptr<OckHmmDeviceInfoVec> deviceInfoVec,
        std::shared_ptr<acladapter::OckAsyncTaskExecuteService> service, uint32_t timeout);
};

}
}
#endif